# Copyright 2017 Intel Corporation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # ------------------------------------------------------------------------------ version: "2.1" volumes: pbft-shared: services: smallbank-tp-go: image: hyperledger/sawtooth-smallbank-tp-go:1.0.5 container_name: sawtooth-smallbank-tp-go-default depends_on: - validator entrypoint: smallbank-tp-go -vv -C tcp://validator:4004 smallbank-tp-go-1: image: hyperledger/sawtooth-smallbank-tp-go:1.0.5 container_name: sawtooth-smallbank-tp-go-default-1 depends_on: - validator-1 entrypoint: smallbank-tp-go -vv -C tcp://validator-1:4004 smallbank-tp-go-2: image: hyperledger/sawtooth-smallbank-tp-go:1.0.5 container_name: sawtooth-smallbank-tp-go-default-2 depends_on: - validator-2 entrypoint: smallbank-tp-go -vv -C tcp://validator-2:4004 smallbank-tp-go-3: image: hyperledger/sawtooth-smallbank-tp-go:1.0.5 container_name: sawtooth-smallbank-tp-go-default-3 depends_on: - validator-3 entrypoint: smallbank-tp-go -vv -C tcp://validator-3:4004 smallbank-tp-go-4: image: hyperledger/sawtooth-smallbank-tp-go:1.0.5 container_name: sawtooth-smallbank-tp-go-default-4 depends_on: - validator-4 entrypoint: smallbank-tp-go -vv -C tcp://validator-4:4004 rest-api: image: hyperledger/sawtooth-rest-api:1.0.5 container_name: sawtooth-rest-api-default expose: - 8008 ports: - "8008:8008" command: | bash -c " sawtooth-rest-api \ --connect tcp://validator:4004 \ --bind rest-api:8008 " stop_signal: SIGKILL # rest-api-1: # image: hyperledger/sawtooth-rest-api:1.0.5 # container_name: sawtooth-rest-api-default-1 # expose: # - 8009 # command: | # bash -c " # sawtooth-rest-api \ # --connect tcp://validator-1:4004 \ # --bind rest-api-1:8008 # " # stop_signal: SIGKILL # # # rest-api-2: # image: hyperledger/sawtooth-rest-api:1.0.5 # container_name: sawtooth-rest-api-default-2 # expose: # - 8010 # command: | # bash -c " # sawtooth-rest-api \ # --connect tcp://validator-2:4004 \ # --bind rest-api-2:8008 # " # stop_signal: SIGKILL # # # rest-api-3: # image: hyperledger/sawtooth-rest-api:1.0.5 # container_name: sawtooth-rest-api-default-3 # expose: # - 8011 # command: | # bash -c " # sawtooth-rest-api \ # --connect tcp://validator-3:4004 \ # --bind rest-api-3:8008 # " # stop_signal: SIGKILL # # rest-api-4: # image: hyperledger/sawtooth-rest-api:1.0.5 # container_name: sawtooth-rest-api-default-4 # expose: # - 8012 # command: | # bash -c " # sawtooth-rest-api \ # --connect tcp://validator-4:4004 \ # --bind rest-api-4:8008 # " # stop_signal: SIGKILL # validator: image: hyperledger/sawtooth-validator:1.0.5 container_name: sawtooth-validator-default expose: - 4004 - 5050 - 8800 ports: - "4004:4004" volumes: - pbft-shared:/pbft-shared command: | bash -c " if [ -e /pbft-shared/validators/validator.priv ]; then cp /pbft-shared/validators/validator.pub /etc/sawtooth/keys/validator.pub cp /pbft-shared/validators/validator.priv /etc/sawtooth/keys/validator.priv fi && if [ ! -e /etc/sawtooth/keys/validator.priv ]; then sawadm keygen mkdir -p /pbft-shared/validators || true cp /etc/sawtooth/keys/validator.pub /pbft-shared/validators/validator.pub cp /etc/sawtooth/keys/validator.priv /pbft-shared/validators/validator.priv fi && if [ ! -e config-genesis.batch ]; then sawset genesis -k /etc/sawtooth/keys/validator.priv -o config-genesis.batch fi && while [[ ! -f /pbft-shared/validators/validator-1.pub || \ ! -f /pbft-shared/validators/validator-2.pub || \ ! -f /pbft-shared/validators/validator-3.pub || \ ! -f /pbft-shared/validators/validator-4.pub ]]; do sleep 1; done echo sawtooth.consensus.pbft.peers=\\['\"'$$(cat /pbft-shared/validators/validator.pub)'\"','\"'$$(cat /pbft-shared/validators/validator-1.pub)'\"','\"'$$(cat /pbft-shared/validators/validator-2.pub)'\"','\"'$$(cat /pbft-shared/validators/validator-3.pub)'\"','\"'$$(cat /pbft-shared/validators/validator-4.pub)'\"'\\] && if [ ! -e config.batch ]; then sawset proposal create \ -k /etc/sawtooth/keys/validator.priv \ sawtooth.consensus.algorithm.name=pbft \ sawtooth.consensus.algorithm.version=0.1 \ sawtooth.consensus.pbft.peers=\\['\"'$$(cat /pbft-shared/validators/validator.pub)'\"','\"'$$(cat /pbft-shared/validators/validator-1.pub)'\"','\"'$$(cat /pbft-shared/validators/validator-2.pub)'\"','\"'$$(cat /pbft-shared/validators/validator-3.pub)'\"','\"'$$(cat /pbft-shared/validators/validator-4.pub)'\"'\\] \ sawtooth.publisher.max_batches_per_block=1200 \ -o config.batch fi && if [ ! -e /var/lib/sawtooth/genesis.batch ]; then sawadm genesis config-genesis.batch config.batch fi && if [ ! -e /root/.sawtooth/keys/my_key.priv ]; then sawtooth keygen my_key fi && sawtooth-validator -vv \ --endpoint tcp://validator:8800 \ --bind component:tcp://eth0:4004 \ --bind consensus:tcp://eth0:5050 \ --bind network:tcp://eth0:8800 \ --scheduler parallel \ --peering static \ --maximum-peer-connectivity 10000 " validator-1: image: hyperledger/sawtooth-validator:1.0.5 container_name: sawtooth-validator-default-1 expose: - 4004 - 5050 - 8800 volumes: - pbft-shared:/pbft-shared command: | bash -c " if [ -e /pbft-shared/validators/validator-1.priv ]; then cp /pbft-shared/validators/validator-1.pub /etc/sawtooth/keys/validator.pub cp /pbft-shared/validators/validator-1.priv /etc/sawtooth/keys/validator.priv fi && if [ ! -e /etc/sawtooth/keys/validator.priv ]; then sawadm keygen mkdir -p /pbft-shared/validators || true cp /etc/sawtooth/keys/validator.pub /pbft-shared/validators/validator-1.pub cp /etc/sawtooth/keys/validator.priv /pbft-shared/validators/validator-1.priv fi && sawtooth keygen my_key && sawtooth-validator -vv \ --endpoint tcp://validator-1:8800 \ --bind component:tcp://eth0:4004 \ --bind consensus:tcp://eth0:5050 \ --bind network:tcp://eth0:8800 \ --scheduler parallel \ --peering static \ --maximum-peer-connectivity 10000 \ --peers tcp://validator:8800 " validator-2: image: hyperledger/sawtooth-validator:1.0.5 container_name: sawtooth-validator-default-2 expose: - 4004 - 5050 - 8800 volumes: - pbft-shared:/pbft-shared command: | bash -c " if [ -e /pbft-shared/validators/validator-2.priv ]; then cp /pbft-shared/validators/validator-2.pub /etc/sawtooth/keys/validator.pub cp /pbft-shared/validators/validator-2.priv /etc/sawtooth/keys/validator.priv fi && if [ ! -e /etc/sawtooth/keys/validator.priv ]; then sawadm keygen mkdir -p /pbft-shared/validators || true cp /etc/sawtooth/keys/validator.pub /pbft-shared/validators/validator-2.pub cp /etc/sawtooth/keys/validator.priv /pbft-shared/validators/validator-2.priv fi && sawtooth keygen my_key && sawtooth-validator -vv \ --endpoint tcp://validator-2:8800 \ --bind component:tcp://eth0:4004 \ --bind consensus:tcp://eth0:5050 \ --bind network:tcp://eth0:8800 \ --scheduler parallel \ --peering static \ --maximum-peer-connectivity 10000 \ --peers tcp://validator:8800 \ --peers tcp://validator-1:8800 " validator-3: image: hyperledger/sawtooth-validator:1.0.5 container_name: sawtooth-validator-default-3 expose: - 4004 - 5050 - 8800 volumes: - pbft-shared:/pbft-shared command: | bash -c " if [ -e /pbft-shared/validators/validator-3.priv ]; then cp /pbft-shared/validators/validator-3.pub /etc/sawtooth/keys/validator.pub cp /pbft-shared/validators/validator-3.priv /etc/sawtooth/keys/validator.priv fi && if [ ! -e /etc/sawtooth/keys/validator.priv ]; then sawadm keygen mkdir -p /pbft-shared/validators || true cp /etc/sawtooth/keys/validator.pub /pbft-shared/validators/validator-3.pub cp /etc/sawtooth/keys/validator.priv /pbft-shared/validators/validator-3.priv fi && sawtooth keygen my_key && sawtooth-validator -vv \ --endpoint tcp://validator-3:8800 \ --bind component:tcp://eth0:4004 \ --bind consensus:tcp://eth0:5050 \ --bind network:tcp://eth0:8800 \ --scheduler parallel \ --peering static \ --maximum-peer-connectivity 10000 \ --peers tcp://validator:8800 \ --peers tcp://validator-1:8800 \ --peers tcp://validator-2:8800 " validator-4: image: hyperledger/sawtooth-validator:1.0.5 container_name: sawtooth-validator-default-4 expose: - 4004 - 5050 - 8800 volumes: - pbft-shared:/pbft-shared command: | bash -c " if [ -e /pbft-shared/validators/validator-4.priv ]; then cp /pbft-shared/validators/validator-4.pub /etc/sawtooth/keys/validator.pub cp /pbft-shared/validators/validator-4.priv /etc/sawtooth/keys/validator.priv fi && if [ ! -e /etc/sawtooth/keys/validator.priv ]; then sawadm keygen mkdir -p /pbft-shared/validators || true cp /etc/sawtooth/keys/validator.pub /pbft-shared/validators/validator-4.pub cp /etc/sawtooth/keys/validator.priv /pbft-shared/validators/validator-4.priv fi && sawtooth keygen my_key && sawtooth-validator -vv \ --endpoint tcp://validator-4:8800 \ --bind component:tcp://eth0:4004 \ --bind consensus:tcp://eth0:5050 \ --bind network:tcp://eth0:8800 \ --scheduler parallel \ --peering static \ --maximum-peer-connectivity 10000 \ --peers tcp://validator:8800 \ --peers tcp://validator-1:8800 \ --peers tcp://validator-2:8800 \ --peers tcp://validator-3:8800 " # -------------=== pbft engines ===------------- pbft: image: hyperledger/sawtooth-pbft-engine:0.1.2 container_name: sawtooth-pbft-engine-default command: pbft-engine -vv --connect tcp://validator:5050 stop_signal: SIGKILL pbft-1: image: hyperledger/sawtooth-pbft-engine:0.1.2 container_name: sawtooth-pbft-engine-default-1 command: pbft-engine -vv --connect tcp://validator-1:5050 stop_signal: SIGKILL pbft-2: image: hyperledger/sawtooth-pbft-engine:0.1.2 container_name: sawtooth-pbft-engine-default-2 command: pbft-engine -vv --connect tcp://validator-2:5050 stop_signal: SIGKILL pbft-3: image: hyperledger/sawtooth-pbft-engine:0.1.2 container_name: sawtooth-pbft-engine-default-3 command: pbft-engine -vv --connect tcp://validator-3:5050 stop_signal: SIGKILL pbft-4: image: hyperledger/sawtooth-pbft-engine:0.1.2 container_name: sawtooth-pbft-engine-default-4 command: pbft-engine -vv --connect tcp://validator-4:5050 stop_signal: SIGKILL shell: image: hyperledger/sawtooth-all:1.0.5 container_name: sawtooth-shell-default depends_on: - rest-api environment: - http_proxy=$http_proxy - https_proxy=$https_proxy - no_proxy=$no_proxy volumes: - '.:/project/' entrypoint: "bash -c \"\ sawtooth keygen && \ tail -f /dev/null \ \"" # settings-tp: # image: hyperledger/sawtooth-settings-tp:1.0 # container_name: sawtooth-settings-tp-default # depends_on: # - validator # entrypoint: settings-tp -vv -C tcp://validator:4004 # # smallbank-tp-go: # image: hyperledger/sawtooth-smallbank-tp-go:1.0 # container_name: sawtooth-smallbank-tp-go-default # depends_on: # - validator # entrypoint: smallbank-tp-go -vv -C tcp://validator:4004 # # validator: # image: hyperledger/sawtooth-validator:1.0 # container_name: sawtooth-validator-default # expose: # - 4004 # ports: # - "4004:4004" # # start the validator with an empty genesis batch # entrypoint: "bash -c \"\ # sawadm keygen && \ # sawtooth keygen my_key && \ # sawset genesis -k /root/.sawtooth/keys/my_key.priv && \ # sawadm genesis config-genesis.batch && \ # sawtooth-validator -vv \ # --endpoint tcp://validator:8800 \ # --bind component:tcp://eth0:4004 \ # --bind network:tcp://eth0:8800 \ # \"" # # rest-api: # image: hyperledger/sawtooth-rest-api:1.0 # container_name: sawtooth-rest-api-default # expose: # - 8008 # ports: # - "8008:8008" # depends_on: # - validator # entrypoint: sawtooth-rest-api -vvv -C tcp://validator:4004 --bind rest-api:8008